package com.example.test1.controller;

import com.example.test1.bean.UserBean;
import com.example.test1.bean.UserImgBean;
import com.example.test1.service.UserService;
import com.example.test1.util.FileUtils;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.github.pagehelper.PageInfo;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

@Controller
public class UserController {
    @Resource
    UserService userService;

    @RequestMapping("/users")
    public String showUsers4page(@RequestParam(defaultValue = "1") Integer pageNum,
                                 @RequestParam(defaultValue = "3") Integer pageSize,
                                 Model model){
        PageInfo<UserBean> pageInfo = userService.selectUser4Page(pageNum,pageSize);
        model.addAttribute("pageInfo",pageInfo);
        model.addAttribute("userList",pageInfo.getList());

        return "users";
    }

    @RequestMapping("/modifyUser")
    @ResponseBody
    public Map updateUser(UserBean userBean){
        int flag = userService.updateUser(userBean);
        Map<String,Object> map = new HashMap<>();
        if (flag == 1){
            map.put("msg","修改用户信息成功");
            return map;
        }else {
            map.put("msg","修改用户信息失败");
            return map;
        }
    }

    @RequestMapping(value = "/delUserImg")
    @ResponseBody
    public Map delUserImg(@RequestParam("id") String id){
        int flag = userService.delUserImg(id);
        Map<String,Object> mapMsg = new HashMap<>();
        if (flag == 1){
            mapMsg.put("msg","修改用户信息成功");
            return mapMsg;
        }else {
            mapMsg.put("msg","修改用户信息失败");
            return mapMsg;
        }
    }

    @RequestMapping("/user/{id}")
    public String getUserById(@PathVariable("id") int id,ModelMap modelMap){
        UserBean userBean = userService.getUserById(id);
        List<UserImgBean> listUserImgBean = userService.getUserImgsById(id);
        modelMap.addAttribute("user",userBean);
        modelMap.addAttribute("userImgsList",listUserImgBean);
        return "userInfo";
    }

@RequestMapping(value = "/deleteUser/{id}")
public String deleteUser(@PathVariable("id") int id) {
    int nRow = userService.deleteUser(id);
    if (nRow > 0) {
        return "redirect:/users";
    }
    return "error";
}
@RequestMapping(value = "/addUser",method = RequestMethod.POST)
public String addUser(UserBean userBean, HttpServletRequest request) {
    int flag = userService.insertUser(userBean);

    UserImgBean userImgBean = new UserImgBean();
    List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
    for (MultipartFile multipartFile : files) {
        if (multipartFile.isEmpty())
            continue;
        byte[] fileBytes = new byte[0];
        try {
            fileBytes = multipartFile.getBytes();
            String originalFilename = multipartFile.getOriginalFilename();
            originalFilename = originalFilename.substring(originalFilename.lastIndexOf("."));
            String fileName = UUID.randomUUID() + originalFilename;
            boolean bRet = FileUtils.uploadFile(fileBytes, "static/upload/" + fileName);
            if (bRet == false)
                continue;

            userImgBean.setId(0);
            userImgBean.setUser_id(userBean.getId());
            userImgBean.setImg("upload/" + fileName);
            int iFlag = userService.insertUserImg(userImgBean);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    return "redirect:/users";
}

   /*
    @RequestMapping("/users")
    public String showUsers(ModelMap modelMap){
        List<UserBean> userList = userService.getAllUser();
        modelMap.addAttribute("userList",userList);
        return "users";
    }*/

    @RequestMapping("/addUser")
    @ResponseBody
    public Map addUser(UserBean userBean) {
        int flag = userService.insertUser(userBean);
        Map<String, Object> map = new HashMap<String, Object>();
        if (flag == 1) {
            map.put("msg", "新增用户成功");
            return map;
        } else {
            map.put("msg", "新增用户失败");
            return map;
        }
    }


}